package cn.ryh.gat1400.service;


import cn.ryh.gat1400.model.KeepaliveObject;
import cn.ryh.gat1400.model.RegisterObject;
import cn.ryh.gat1400.model.ResponseStatusObject;
import cn.ryh.gat1400.model.UnRegisterObject;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @Author: aiLin
 * @Date: 2020/9/27 11:24
 * @desc: 注册 | 注销 | 心跳
 *
 * 如果现场环境开启了注册认证机制，则需要关注本小节内容。
 * 视图库API的访问，需要进行身份验证，身份信息放在请求头部参数User-Identify，即一个新请求方的访问需要向视图库进行注册，注册成功后，才能进行后续操作
 *
 *
 * 说明:
 * 1.视图库通过用户分配，手动分配username，password给三方对接程序中，
 * 2.三方对接程序第一次请求由于不知道Authorization请求头填写信息，所以视图库接收到未带Authorization请求头信息的请求会返回401，且附带请求头WWW-Authenticate请求头信息
 * 3.三方根据视图库响应的WWW-Authenticate信息进行RFC2617 digest加密生成秘钥放入请求头Authorization中，重新发起请求
 * 4.视图库解析Authorization请求头中的秘钥，将解析出的用户名和密码进行匹配，匹配成功，则注册成功，否则注册失败
 *
 * 注意:在上面流程图中对接程序向视图库发起的两次请求中，请求体都应该为key为DevicelD，value
 * 为对应发起方系统的标识ID的JSON字符串，例: ("RegisterObject":("DevicelD":"33010299011190000253"))，
 * 注册成功后，每次请求需添加请求头部参数User-ldentify，值为DevicelD的value (33010299011190000253)
 *
 */
public interface RegisterService {

    /***
     * 注册
     * @param registerObject
     * @return
     */
    public ResponseStatusObject register(@RequestBody RegisterObject registerObject);

    /***
     * 注销
     * @param unRegisterObject
     * @return
     */
    public ResponseStatusObject unRegister(@RequestBody UnRegisterObject unRegisterObject);

    /***
     * 保活
     * @param keepaliveObject
     * @return
     */
    public ResponseStatusObject keepalive(@RequestBody KeepaliveObject keepaliveObject);
}
